package chapter02

/**
 * @program lu-scala01
 * @description: 函数致简原则
 * @author: zhanglu
 * @create: 2022-02-13 19:00:00
 */
object C05_Function {

  def main(args: Array[String]): Unit = {
    //1.return可以省略，scala会使用函数体的最后一行代码作为返回值
    //2.如果函数体只有一行代码，可以省略花括号
    def f1(name: String) : String = {
      return name;
    }
    println(f1("lu1"))

    //3.返回值类型如果能够推断出来，那么可以省略
    //4.如果有return，则不能省略返回值类型，必须指定
    def f2(name: String) = {
      name
    }
    println(f2("lu2"))

    //5.如果明确声明是Unit，及时函数体中使用return也不能返回值
    def f3(name: String): Unit = {
      return name
    }
    println(f3("lu3"))

    //6.Scala如果期望是无返回值类型，可以省略等号
    def f4(name: String) {
      return name
    }
    println(f4("lu4"))

    //7.如果函数无参，但是声明了参数列表，那么调用时，小括号可加可不加
    def f5(){
      println("lu5")
    }
    f5

    //8.如果函数无参，那么小括号可以省略，调用时必须省略
    def f6 {
      println("lu6")
    }
    f6

    //匿名函数，lambda表达式
    //9.如果不关心名称，只关心逻辑处理，那么函数名 def 可以省略
    var f7 = (name: String) => {
      println(name)
    }
    f7("lu7")

  }

}
